package com.suray.basic.wcs.path.enums;


import com.suray.basic.wcs.utils.IBaseEnum;

import java.io.Serializable;

/**
 * @author shaozn
 * 7：出入口、6：入库口、5：充电口、4：提升机、3：通道、2：货位、1：禁用
 */

public enum NodeType  implements IBaseEnum {
    /**
     * 禁用
     */
    B(1, "B", "禁用"),
    /**
     * Station 工位
     */
    ST(1, "ST", "工位"),
    /**
     * 货位
     */
    P(2, "P", "货位"),

    /**
     * Automatic Door 电控自动门
     */
    AD(3, "AD", "自动门"),
    /**
     * 通道
     */
    R(3, "R", "通道"),
    /**
     * 穿层提升机
     */
    TL(4, "TL", "穿层提升机"),
    /**
     * 提升机
     */
    L(4, "L", "提升机"),
    /**
     * 充电桩
     */
    C(5, "C", "充电桩"),
    /**
     * 接驳点（小车和输送线交互的点）
     */
    CONNECTION(6, "CONNECTION", "输送接驳点"),
    /**
     * 自动升降机
     */
    AE(7, "AE", "自动升降机"),
    /**
     * 牙叉升降机
     */
    TE(8, "TE", "牙叉升降机"),
    ;

    private String code;
    private String describe;
    private Integer codeNum;

    /**
     * 构造器
     *
     * @param codeNum  给小车写地图用
     * @param code     数据库字段
     * @param describe 描述
     */
    NodeType(Integer codeNum, String code, String describe) {
        this.codeNum = codeNum;
        this.setCode(code);
        this.setDescribe(describe);
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getDescribe() {
        return describe;
    }

    public void setDescribe(String describe) {
        this.describe = describe;
    }

    /**
     * @param code
     * @return NodeType
     */
    public static NodeType parseNodeType(String code) {
        NodeType[] nodeTypes = NodeType.values();
        for (NodeType nodeType : nodeTypes) {
            if (nodeType.code.equals(code)) {
                return nodeType;
            }
        }
        throw new IllegalArgumentException("节点类型参数异常:" + code);
    }

    public Integer getCodeNum() {
        return codeNum;
    }

    public void setCodeNum(Integer codeNum) {
        this.codeNum = codeNum;
    }

    @Override
    public String getDescription() {
        return describe;
    }

    @Override
    public String getVal() {
        return code;
    }

    @Override
    public Serializable getValue() {
        return code;
    }
}
